/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package BasaSobol;

/**
 * Klasa odpowiedzialna za zarządzanie kolejką klientów
 * @author bąsa
 */
public class Klienci {
    /**
     *  Sprawdza czy klient o zadanym IP istnieje
     * @param IP IP szukanego klienta
     * @return true, jeśli istnieje, w przeciwnym przypadku false
     */
    public static boolean istnieje(String IP) {
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).getIP().equals(IP)) {
                return true;
            }
        }
        
        return false;
    }

    /**
     * @param login String zawierający login klienta
     * @return String zawierający IP odpowiadającego klienta, lub pusty w przypadku gdy klient nie istnieje
     */
    public static String znajdzIPPoLoginie(String login) {
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).getLogin().equals(login)) {
                return Main.klienci.get(i).getIP();
            }
        }
        
        return "";
    }

    /**
     * @param IP IP szukanego klienta
     * @return login klienta odpowiadającego IP lub pusty string, jeśli klient nie istnieje
     */
    public static String znajdzLoginPoIP(String IP) {
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).getIP().equals(IP)) {
                return Main.klienci.get(i).getLogin();
            }
        }
        
        return "";
    }

    /**
     * Funkcja dodaje nowego klienta do kolejki klientów
     * @param ip IP klienta
     * @param login Login klienta
     */
    public static void dodajKlienta(String ip, String login) {
        Klient klient  = new Klient();
        klient.setIP(ip);
        klient.setLogin(login);
        Main.klienci.add(klient);
    }

    /**
     * Funkcja usuwa klienta z kolejki
     * Jeśli klient nie istnieje, funkcja nic nie robi
     * @param ip IP klienta do usunięcia
     * @param login Login klienta do usunięcia
     */
    public static void usunKlienta(String ip, String login) {
        if(!znajdzIPPoLoginie(login).equals(ip)) {
            System.out.println("blad, usunKlienta");
            return;
        }
        
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).getLogin().equals(login)) {
                Main.klienci.remove(i);
                break;
            }
        }
    }

    /**
     * Funkcja zmienia status odpowiedniego klienta
     * @param ip IP klienta którego status ma być zmieniony
     * @param nowyStatus Status który ma zostac ustawiony
     */
    public static void zmienStatus(String ip, String nowyStatus) {
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).getIP().equals(ip)) {
                Main.klienci.get(i).setStatus(nowyStatus);
                break;
            }
        }
    }

    public static void resetujCzasBezPinga(String ip) {
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).getIP().equals(ip)) {
                Main.klienci.get(i).resetujCzasBezPinga();
                break;
            }
        }
    }

    public static void sprawdzCzasPinga() {
        int rozmiarListyKlientow = Main.klienci.size();
        for(int i = 0; i < rozmiarListyKlientow; i++) {
            if(Main.klienci.get(i).pobierzCzasBezPinga() > 30.0f) {
                Main.klienci.remove(i);
                Main.oknoGlowne.aktualizujPokazywanychUzytkownikow();
                break;
            }
        }
    }
}
